package com.freeman.cement.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freeman.cement.mapper.CameraDao;
import com.freeman.cement.mapper.EventTypeDao;
import com.freeman.cement.entity.Camera;
import com.freeman.cement.entity.EventType;
import com.freeman.cement.entity.ResultObject;
import com.freeman.cement.entity.hikvision.HikResultObject;
import com.freeman.cement.myenum.Enabled;
import com.freeman.cement.myenum.Subed;
import com.freeman.cement.util.ConfigUtil;
import com.freeman.cement.util.hikiscUtil;

import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;

/**
 * 作为中转响应客户端的请求，从海康接口访问取得数据，然后返回给客户端
 */
@Controller
@RequestMapping("/hikisc")
public class HikIscController {

    @Resource
    private CameraDao cameraDao;
    @Resource
    private EventTypeDao eventTypeDao;

    @RequestMapping(value = "/readRootInfo", method = RequestMethod.POST, produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String readRootInfo() {
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("pageNo", 1);
        jsonBody.put("pageSize", 1000);
        String body = jsonBody.toJSONString();
        String result =  hikiscUtil.doPostStringArtemis("/api/resource/v1/regions/root", body);
        System.out.println("readRootInfo结果: " + result);
        return result;
    }

    @RequestMapping(value = "/readCameraList", method = RequestMethod.POST, produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String readCameraList() {
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("pageNo", 1);
        jsonBody.put("pageSize", 1000);
        String body = jsonBody.toJSONString();
        String result =  hikiscUtil.doPostStringArtemis("/api/resource/v2/camera/search", body);
        System.out.println("readCameraList结果: " + result);
        return result;
    }

    //同步摄像头列表模拟测试
    private void getCameraListMockForTest(List<Camera> cameras)
    {
        //String result = "{\"code\":\"0\",\"msg\":\"success\",\"data\":{\"total\":6,\"pageNo\":1,\"pageSize\":10,\"list\":[{\"altitude\":null,\"cameraIndexCode\":\"ca25a8a7598f438188f92945b850e1bd\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"b686d9e8d1534420bff702c8f762c4bc\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"96ed6561662f4d28afe7197eb877db09\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"365323c54bb5419986d67d62813a1eb5\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"6e019b8e38bb4f0bad43bc7d8f4d73ce\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"6942ee49d06143fdbe177dd0edc7a640\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"}]}}\n";
        String result = "{\"code\":\"0\",\"msg\":\"success\",\"data\":{\"total\":8,\"pageNo\":1,\"pageSize\":10,\"list\":[{\"altitude\":null,\"cameraIndexCode\":\"1a25a8a7598f438188f92945b850e1bd\",\"cameraName\":\"Camera 08\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"521a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"2686d9e8d1534420bff702c8f762c4bc\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"36ed6561662f4d28afe7197eb877db09\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"465323c54bb5419986d67d62813a1eb5\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"5e019b8e38bb4f0bad43bc7d8f4d73ce\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"6942ee49d06143fdbe177dd0edc7a640\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"7942ee49d06143fdbe177dd0edc7a640\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"},{\"altitude\":null,\"cameraIndexCode\":\"8942ee49d06143fdbe177dd0edc7a640\",\"cameraName\":\"Camera 01\",\"cameraType\":0,\"cameraTypeName\":\"枪机\",\"capabilitySet\":\"heatmap,event_body,event_face,passenger_flow,event_veh_compare,event_veh,event_veh_recognition,event_ias,event_heat,record,vss,net,event_device,event_face_detect_alarm,event_person_queue,event_audio,io,MixMixedRoot,event_rule,event_pdc,face,drawFrameInPlayBack,ptz,event_io,event_real_time_thermometry,maintenance,event_city_mgr,PlayConvert,status\",\"capabilitySetName\":\",人体事件能力,人脸事件能力,客流能力,车辆比对事件能力,车辆事件能力,车辆识别事件能力,入侵报警事件能力,热成像事件能力,录像能力,视频能力,网络参数配置能力,设备事件能力,人脸侦测告警,排队检测事件能力,音频事件能力,IO能力,,行为分析事件能力,客流统计事件能力,人脸识别能力,,云台能力,IO事件能力,实时测温事件能力,设备维护能力,智慧城管事件能力,,状态能力\",\"intelligentSet\":null,\"intelligentSetName\":null,\"channelNo\":\"1\",\"channelType\":\"digital\",\"channelTypeName\":\"数字通道\",\"createTime\":\"2021-12-02T23:35:45.981+08:00\",\"encodeDevIndexCode\":\"6a095d6a72124cc6b8bdd06f790934bc\",\"encodeDevResourceType\":null,\"encodeDevResourceTypeName\":null,\"gbIndexCode\":\"13020400581314000002\",\"installLocation\":null,\"keyBoardCode\":null,\"latitude\":null,\"longitude\":null,\"pixel\":null,\"ptz\":null,\"ptzName\":null,\"ptzController\":null,\"ptzControllerName\":null,\"recordLocation\":null,\"recordLocationName\":null,\"regionIndexCode\":\"421a290e-4389-4e24-90de-e553b67ffbd4\",\"status\":null,\"statusName\":null,\"transType\":1,\"transTypeName\":\"TCP\",\"treatyType\":null,\"treatyTypeName\":null,\"viewshed\":null,\"updateTime\":\"2021-12-02T23:37:04.564+08:00\"}]}}\n";
        if(StringUtils.isNotBlank(result)) {
            try {
                HikResultObject ro = JSONObject.parseObject(result, HikResultObject.class);
                if (ro.getCode().equals("0"))
                {
                    JSONObject data = JSONObject.parseObject(ro.getData());
                    JSONArray list = data.getJSONArray("list");
                    List<Camera> array = list.toJavaList(Camera.class);
                    if (array != null && array.size() > 0)
                    {
                        cameras.addAll(array);
                    }
                }
            }catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }

    //先获取第1页共1000条数据，如果返回了1000条数据，就再读第2页，以此类推，直到返回的这页数据不足1000条，说明读取了全部的摄像头
    private void getCameraList(List<Camera> cameras, int pageNo, int pageSize)
    {
        /**
         *  使用综合安防管理平台v1.5.100
         *  分页获取监控点资源
         *  获取监控点列表接口可用来全量同步监控点信息，返回结果分页展示
         *  /api/resource/v1/cameras
         */

        String url = "/api/resource/v1/cameras";
        JSONObject jsonBody = new JSONObject();

        jsonBody.put("pageNo", pageNo);
        jsonBody.put("pageSize", pageSize);

        String result =  hikiscUtil.doPostStringArtemis(url, jsonBody.toJSONString());
        if(StringUtils.isNotBlank(result)) {
            try {
                HikResultObject ro = JSONObject.parseObject(result, HikResultObject.class);
                if (ro.getCode().equals("0"))
                {
                    JSONObject data = JSONObject.parseObject(ro.getData());
                    JSONArray list = data.getJSONArray("list");
                    List<Camera> array = list.toJavaList(Camera.class);
                    //List<Camera> array = JSONArray.parseArray(data.get("list").toString(), Camera.class);
                    if (array != null && array.size() > 0)
                    {
                        cameras.addAll(array);
                        if (array.size() == pageSize)
                        {
                            getCameraList(cameras, ++pageNo, pageSize);
                        }
                    }
                }
            }catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }

    //同步摄像头列表
    //！！！不建议使用该接口！！！
    //这个会从摄像头列表中，全部删除已有摄像头，然后再重新添加一遍，然后需要全部重新配置摄像头的工段、专业、所属值班室关系
    @RequestMapping(value = "/syncCameraList", method = RequestMethod.POST)
    @ResponseBody
    public ResultObject syncCameraList()
    {
        ResultObject ro = new ResultObject(1,"",null);
        List<Camera> cameras = new ArrayList<>();
        //先获取第1页共1000条数据，如果返回了1000条数据，就再读第2页，以此类推，直到返回的这页数据不足1000条，说明读取了全部的摄像头
        getCameraList(cameras, 1, 1000);
        if(cameras.size() > 0)
        {
            //新的摄像头都设置为可接收报警
            cameras.forEach(c->c.setIsRecvEnabled(1));
            //清空现有摄像头数据表
            cameraDao.clearTable();
            //将新的摄像头集合存入数据库
            cameraDao.insertCameras(cameras);
            ro.setCode(0);
            ro.setMsg("摄像头列表同步成功");
        }else{
            //提示读取不成功
            ro.setCode(1);
            ro.setMsg("未能读取到摄像头信息，保留现有摄像头列表");
        }
        return ro;
    }

    //同步摄像头列表
    /**
     * 实现了比对功能
     * 从海康平台处取得全部的摄像头
     * 注意这里的createTime,updateTime 使用本程序的时间，不再使用海康平台的时间
     * 1、对于数据表中已有的具有相同CameraIndexCode的摄像头，更新摄像头所有属性。
     * 2、对于数据表中没有的摄像头进行添加，创建时间、更新时间为当前时间
     * 3、如果数据表中的摄像头，不在海康返回的摄像头列表里，则该摄像头标记为“停用”，更新时间为当前时间
     */
    @RequestMapping(value = "/syncCompareCameraList", method = RequestMethod.POST)
    @ResponseBody
    public ResultObject syncCompareCameraList()
    {
        ResultObject ro = new ResultObject(1,"",null);
        List<Camera> cameras = new ArrayList<>();

        //无平台对接测试使用
        //getCameraListMockForTest(cameras);

        //先获取第1页共1000条数据，如果返回了1000条数据，就再读第2页，以此类推，直到返回的这页数据不足1000条，说明读取了全部的摄像头
        getCameraList(cameras, 1, 1000);

        if(cameras.size() > 0)
        {
            List<Camera> dtCameras = cameraDao.selectAllCameras();
            //遍历数据库中摄像头列表，对于海康平台返回的列表中不包含的摄像头，标记为停用
            for (Camera c : dtCameras) {
                if(!cameras.stream().anyMatch(s->s.getCameraIndexCode().equals(c.getCameraIndexCode()))) {
                    c.setIsEnabled(Enabled.FALSE.getIndex());
                    /**
                     * 2022-03-04T18:52:15.301+08:00 为UTC世界协调时间格式
                     */
                    c.setUpdateTime(new org.joda.time.DateTime().toString());// new Date()为获取当前系统时间
                    cameraDao.updateCamera(c);
                }
            }
            //遍历海康平台返回的摄像头列表
            for (Camera c : cameras) {
                //如果数据表中包含该摄像头
                Optional<Camera> oca = dtCameras.stream().filter(s->s.getCameraIndexCode().equals(c.getCameraIndexCode())).findFirst();
                if(oca.isPresent())
                {
                    c.setIsEnabled(Enabled.TRUE.getIndex());
                    c.setUpdateTime(new org.joda.time.DateTime().toString());
                    cameraDao.updateCamera(c);
                }
                //如果数据表中不包含该摄像头
                else
                {
                    //将新的摄像头集合存入数据库
                    c.setIsEnabled(Enabled.TRUE.getIndex());
                    //新的摄像头都设置为可接收报警
                    c.setIsRecvEnabled(1);
                    c.setCreateTime(new org.joda.time.DateTime().toString());
                    c.setUpdateTime(c.getCreateTime());
                    cameraDao.insertCamera(c);
                }

                /*dtCameras.stream()
                    .filter(s->s.getCameraIndexCode().equals(c.getCameraIndexCode()))
                    .findFirst()
                    .ifPresent(s->{
                        if(!s.isEnabled())
                        {
                            s.setEnabled(true);
                            s.setUpdateTime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date()));
                            cameraDao.updateCamera(s);
                        }
                    });*/

            }
            ro.setCode(0);
            ro.setMsg("摄像头列表同步成功");
        }else{
            //提示读取不成功
            ro.setCode(1);
            ro.setMsg("未能读取到摄像头信息，保留现有摄像头列表");
        }
        return ro;
    }

    /**
     * 获取报警时的图片
     * @return
     */
    @RequestMapping(value = "/getPicUrl")
    @ResponseBody
    public String getPicUrl(@RequestParam String svrIndexCode, @RequestParam String picUri ){
        String rslt = hikiscUtil.getPicUrl(svrIndexCode, picUri);
        return rslt;
    }

    /**
     * 获取报警时的图片
     * @return
     */
    @RequestMapping(value = "/getPicUrlByJsonStr")
    @ResponseBody
    public String getPicUrlByJsonStr(@RequestParam String imageUrl){
        return hikiscUtil.getPicUrlByJsonStr(imageUrl);
    }

    //按事件类型订阅事件
    /*{
        "eventTypes": [
        131329
    ],
        "eventDest": "https://ip:port/eventRcv",
            "subType": 1,
            "eventLvl": [
        2
    ]
    }*/

    @RequestMapping(value = "/eventSubscriptionByEventTypes", method = RequestMethod.POST)
    @ResponseBody
    public ResultObject eventSubscriptionByEventTypes(@RequestBody Integer[] eventTypes) {
        ResultObject ro = new ResultObject(1, "", null);
        List<EventType> types = new ArrayList<>();
        String eventDest = "";
        try {
            eventDest = ConfigUtil.readKey("eventRecvUrl");
        } catch (IOException e) {
            e.printStackTrace();
            eventDest = null;
        }
        if (StringUtils.isNotBlank(eventDest)) {
            JSONObject jsonBody = new JSONObject();
            JSONArray eventTypeArray = new JSONArray();
            //!!!不建议传入eventLvl参数，指定等级的话只会给第三方推送对应等级的事件
            //JSONArray eventLvlArray = new JSONArray();
            for (Integer eventType : eventTypes) {
                EventType select = eventTypeDao.findEventType(Integer.toString(eventType));
                if (select != null) {
                    types.add(select);
                    eventTypeArray.add(eventType);
                    //eventLvlArray.add(eventLvl);
                } else {
                    ro.setCode(3);
                    ro.setMsg("请先新增事件类型[" + eventType + "]，再发起订阅");
                }
            }
            jsonBody.put("eventDest", eventDest);
            //订阅类型，0-订阅原始事件，1-联动事件，2-原始事件和联动事件，不填使用默认值0
            //!!!强烈建议使用2，否则接收不到联动事件！！！
            jsonBody.put("subType", 2);
            jsonBody.put("eventTypes", eventTypeArray);
            //!!!不建议传入eventLvl参数，指定等级的话只会给第三方推送对应等级的事件
            //jsonBody.put("eventLvl", eventLvlArray);
            String body = jsonBody.toJSONString();
            String result = hikiscUtil.doPostStringArtemis("/api/eventService/v1/eventSubscriptionByEventTypes", body);
            JSONObject rslt = JSONObject.parseObject(result);
            ro.setData(rslt);
            if (rslt != null && rslt.getObject("code", String.class).equals("0")) {
                //订阅结果存入数据库
                for (EventType type : types) {
                    if (type != null) {
                        type.setIsSubed(Subed.SUBED.getIndex());
                        eventTypeDao.updateEventType(type);
                    }
                }
                ro.setCode(0);
                ro.setMsg("订阅成功");
            } else {
                for (EventType type : types) {
                    if (type != null) {
                        type.setIsSubed(Subed.NOTSUBED.getIndex());
                        eventTypeDao.updateEventType(type);
                    }
                }
                ro.setCode(1);
                ro.setMsg("订阅失败");
            }
        } else {
            ro.setCode(2);
            ro.setMsg("配置文件中，未配置报警事件接收地址");
        }
        return ro;
    }

    /**
     * 按事件类型订阅事件
     * @param eventType
     * @return
     */
    @RequestMapping(value = "/eventSubscriptionByEventType", method = RequestMethod.POST)
    @ResponseBody
    //public ResultObject eventSubscriptionByEventType(@RequestParam int eventType, @RequestParam int eventLvl) {
    public ResultObject eventSubscriptionByEventType(@RequestParam int eventType) {
        ResultObject ro = new ResultObject(1, "", null);
        String eventDest = "";
        EventType select = eventTypeDao.findEventType(Integer.toString(eventType));
        if (select != null) {
            try {
                eventDest = ConfigUtil.readKey("eventRecvUrl");
            } catch (IOException e) {
                e.printStackTrace();
                eventDest = null;
            }
            if (StringUtils.isNotBlank(eventDest)) {
                JSONObject jsonBody = new JSONObject();
                JSONArray eventTypeArray = new JSONArray();
                eventTypeArray.add(eventType);
                //!!!不建议传入eventLvl参数，指定等级的话只会给第三方推送对应等级的事件
                //JSONArray eventLvlArray = new JSONArray();
                //eventLvlArray.add(eventLvl);
                jsonBody.put("eventTypes", eventTypeArray);
                jsonBody.put("eventDest", eventDest);
                //订阅类型，0-订阅原始事件，1-联动事件，2-原始事件和联动事件，不填使用默认值0
                //!!!强烈建议使用2，否则接收不到联动事件！！！
                jsonBody.put("subType", 2);
                //jsonBody.put("eventLvl", eventLvlArray);

                String body = jsonBody.toJSONString();
                String result = hikiscUtil.doPostStringArtemis("/api/eventService/v1/eventSubscriptionByEventTypes", body);
                JSONObject rslt = JSONObject.parseObject(result);
                ro.setData(rslt);
                if (rslt != null && rslt.getObject("code", String.class).equals("0")) {
                    //订阅结果存入数据库
                    select.setIsSubed(Subed.SUBED.getIndex());
                    ro.setCode(0);
                    ro.setMsg("订阅成功");
                } else {
                    select.setIsSubed(Subed.NOTSUBED.getIndex());
                    ro.setCode(1);
                    ro.setMsg("订阅失败");
                }
                eventTypeDao.updateEventType(select);
            } else {
                ro.setCode(2);
                ro.setMsg("配置文件中，未配置报警事件接收地址");
            }
        } else {
            ro.setCode(3);
            ro.setMsg("请先新增事件类型[" + eventType + "]，再发起订阅");
        }
        return ro;
    }

    //按事件类型取消订阅
    /*{
        "eventTypes": [
        131329
    ]
    }*/

    /**
     * 按事件类型取消订阅
     * @param eventTypes
     * @return
     */
    @RequestMapping(value = "/eventUnSubscriptionByEventTypes", method = RequestMethod.POST)
    @ResponseBody
    public ResultObject eventUnSubscriptionByEventTypes(@RequestBody Integer[] eventTypes) {
        ResultObject ro = new ResultObject(1, "", null);
        List<EventType> types = new ArrayList<>();
        JSONObject jsonBody = new JSONObject();
        JSONArray eventTypeArray = new JSONArray();
        for (Integer eventType : eventTypes) {
            EventType select = eventTypeDao.findEventType(Integer.toString(eventType));
            if (select != null) {
                types.add(select);
                eventTypeArray.add(eventType);
            } else {
                ro.setCode(3);
                ro.setMsg("请先新增事件类型[" + eventType + "]");
            }
        }
        jsonBody.put("eventTypes", eventTypeArray);
        String body = jsonBody.toJSONString();
        String result = hikiscUtil.doPostStringArtemis("/api/eventService/v1/eventUnSubscriptionByEventTypes", body);
        JSONObject rslt = JSONObject.parseObject(result);
        ro.setData(rslt);
        if (rslt != null && rslt.getObject("code", String.class).equals("0")) {
            //订阅结果存入数据库
            for (EventType type : types) {
                if (type != null) {
                    type.setIsSubed(Subed.NOTSUBED.getIndex());
                    eventTypeDao.updateEventType(type);
                }
            }
            ro.setCode(0);
            ro.setMsg("取消订阅成功");

        } else {
            ro.setCode(1);
            ro.setMsg("取消订阅失败");
        }
        return ro;
    }

    /**
     * 按事件类型取消订阅
     * @param eventType
     * @return
     */
    @RequestMapping(value = "/eventUnSubscriptionByEventType", method = RequestMethod.POST)
    @ResponseBody
    public ResultObject eventUnSubscriptionByEventType(@RequestParam int eventType) {
        ResultObject ro = new ResultObject(1, "", null);
        EventType select = eventTypeDao.findEventType(Integer.toString(eventType));
        if (select != null) {
            JSONObject jsonBody = new JSONObject();
            JSONArray eventTypeArray = new JSONArray();
            eventTypeArray.add(eventType);
            jsonBody.put("eventTypes", eventTypeArray);
            String body = jsonBody.toJSONString();
            String result = hikiscUtil.doPostStringArtemis("/api/eventService/v1/eventUnSubscriptionByEventTypes", body);
            JSONObject rslt = JSONObject.parseObject(result);
            ro.setData(rslt);
            if (rslt != null && rslt.getObject("code", String.class).equals("0")) {
                //订阅结果存入数据库
                select.setIsSubed(Subed.NOTSUBED.getIndex());
                ro.setCode(0);
                ro.setMsg("取消订阅成功");
                eventTypeDao.updateEventType(select);
            } else {
                ro.setCode(1);
                ro.setMsg("取消订阅失败");
            }
        } else {
            ro.setCode(3);
            ro.setMsg("请先新增事件类型[" + eventType + "]");
        }
        return ro;
    }

    //提供平台信息
    @RequestMapping(value = "/getInfo", method = RequestMethod.POST, produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String getInfo() {
        String info = "";
        try {
            //File file = ResourceUtils.getFile("classpath:config/hikisc.txt");
            //info = TxtUtil.txt2String(file);
            info = JSONObject.toJSONString(hikiscUtil.getConfig());
        } catch (Exception e) {
            info = e.getMessage();
            e.printStackTrace();
        }
        return info;
    }

    //接收原始报文调试
    @RequestMapping(value = "/transport/**", method = RequestMethod.POST, produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String transport(HttpServletRequest request) {
        String ip = request.getRemoteAddr();
        int port = request.getRemotePort();
        String url = request.getServletPath();

        String hikurl = url.substring(url.indexOf("transport") + 9);
        JSONObject jsonBody = new JSONObject();

        Map map = request.getParameterMap();
        Set keSet = map.entrySet();
        for (Iterator itr = keSet.iterator(); itr.hasNext(); ) {
            Map.Entry me = (Map.Entry) itr.next();
            Object ok = me.getKey();
            Object ov = me.getValue();
            String[] value = new String[1];
            if (ov instanceof String[]) {
                value = (String[]) ov;
            } else {
                value[0] = ov.toString();
            }
            for (int k = 0; k < value.length; k++) {
               jsonBody.put(ok+"", value[k]);
            }
        }
        String result =  hikiscUtil.doPostStringArtemis(hikurl, jsonBody.toJSONString());
        System.out.println("海康平台返回: " + result);
        return result;
    }

//    //接收原始报文调试
//    @RequestMapping(value = "/transport/**", method = RequestMethod.POST, produces = "text/plain;charset=utf-8")
//    @ResponseBody
//    public String transport(HttpServletRequest request) {
//        String ip = request.getRemoteAddr();
//        int port = request.getRemotePort();
//        String url = request.getServletPath();
//
//        String str = "";
//        Map map = request.getParameterMap();
//        Set keSet = map.entrySet();
//        for (Iterator itr = keSet.iterator(); itr.hasNext(); ) {
//            Map.Entry me = (Map.Entry) itr.next();
//            Object ok = me.getKey();
//            Object ov = me.getValue();
//            String[] value = new String[1];
//            if (ov instanceof String[]) {
//                value = (String[]) ov;
//            } else {
//                value[0] = ov.toString();
//            }
//
//            for (int k = 0; k < value.length; k++) {
//                System.out.println(ok + "=" + value[k]);
//                str += (ok + "=" + value[k] + "\n");
//            }
//
//        }
//        return ip + '/' + port + '/' + url + '/' + str;
//    }




}
